//
//  CZOauthViewController.swift
//  05.08--weibo
//
//  Created by fennyYang on 16/5/14.
//  Copyright © 2016年 a. All rights reserved.
//

import UIKit

import SVProgressHUD

class CZOauthViewController: UIViewController
{

     override func loadView()
     {
          view = webView
          webView.delegate = self
     }

     override func viewDidLoad()
     {
          super.viewDidLoad()

           self.view.backgroundColor = GlobalBKGColor

          //设置导航栏， 左边
          navigationItem.leftBarButtonItem = UIBarButtonItem(title: "填充", style: UIBarButtonItemStyle.Plain, target: self, action: "autoFill")

          //右边
          navigationItem.rightBarButtonItem = UIBarButtonItem(title: "取消", style: UIBarButtonItemStyle.Plain, target: self, action: "close")

          // title
          navigationItem.title = "登录"

          // 使用WebView加载登录界面
          let urlString = oauthURLString + "?client_id=" + client_id + "&redirect_uri=" + redirect_uri

          let url = NSURL(string: urlString)

          let request = NSURLRequest(URL: url!)

          webView.loadRequest(request)

          CZPrint(items: "urlString: \(urlString)")

          //加指示器，显示正在加载
          SVProgressHUD.showWithStatus("正在加载...")  // 进度形式,如果不主动关闭,会一直存在


     }

     // MARK: - 点击事件
     @objc private func autoFill()
     {
//          CZPrint(items: "")
          let jsString = "document.getElementById('userId').value='13631226475';document.getElementById('passwd').value='win065123112112';"

          // 使用WebView执行JS代码
          webView.stringByEvaluatingJavaScriptFromString(jsString)

     }

     //取消
     @objc private func close()
     {
          SVProgressHUD.dismiss()
          dismissViewControllerAnimated(true, completion: nil)
     }

     //MARK: - 懒加载  webView
     private lazy var webView: UIWebView = UIWebView()

}


extension CZOauthViewController: UIWebViewDelegate
{
     //webView加载完成调用
     func webViewDidFinishLoad(webView: UIWebView)
     {
          SVProgressHUD.dismiss()
     }


// webView加载网页的时候回调用这个方法,加载一次回调一次,询问我们是否要加载某个请求
// return true可以加载这个界面
// teturn false就不加载
   func webView(webView: UIWebView, shouldStartLoadWithRequest   request: NSURLRequest, navigationType:  UIWebViewNavigationType) -> Bool
   {
       let url = request.URL!

//       CZPrint(items: "request: \(url.absoluteString)")

      // 点击授权: http://www.baidu.com/?code=46f61a46f57a8929fa4bb0c1a27a6e84
      // 点击取消: http://www.baidu.com/?error_uri=%2Foauth2%2Fauthorize&error=access_denied&error_description=user%20denied%20your%20request.&error_code=21330

     if !url.absoluteString.hasPrefix(redirect_uri)
     {
          // 只要不是授权回调地址,是新浪的界面,就让他去加载
          return true
     }
     else
     {
          // 是授权回调地址,点击的是取消或授权,不让他去加载,我们自己来做一些事情
          // URL的query: ?后面的东西
          let query = url.query!
          //            CZPrint(items: "query: \(query)")
          let codeString = "code="
          if query.hasPrefix(codeString)
          {
               // 如果query 是以 code=开头表示点击的授权按钮
               // 从query中截取code的值,substringFromIndex从指定位置截取到最后
               let code = (query as NSString).substringFromIndex(codeString.characters.count)
               CZPrint(items: "code: \(code)")

               /// 加载AccessToken,字典转模型,模型保存到沙盒
               CZUserAccountViewModel.sharedInstance.loadAccessToken(code, callback:
                    {(error) ->()in

                         if error != nil
                         {
                              //出现错误
                              CZPrint(items: "出现错误: \(error)")

                              SVProgressHUD.showErrorWithStatus("你的网络不给力。。。")

                              // 延迟一秒关闭
                              dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in

                                       self.close()

                                  })
                         }
                         else
                         {
                              //没有错误,登录成功
                              self.close()

                              // 跳转到CZWelcomeViewCotroller
                              // 调用AppDelegate的switchRootVIewContriller
                              let appDelegate = (UIApplication.sharedApplication().delegate as!AppDelegate)

                               appDelegate.switchRootViewController(CZWelcomeViewController())
                         }
                    })
          }
          else
          {
                // query不是以code=开头,点击的是取消按钮
               close()
          }

          return false
       }
    }
}
























